package com.swak.consistency.tcc.storage;

import java.util.Date;
import java.util.List;

import com.swak.consistency.tcc.context.TransLog;

/**
 * 事务日志服务
 * 
 * @author DELL
 */
public interface TransLogStorage {

	/**
	 * 查询当前事务
	 * 
	 * @param transId
	 * @return
	 */
	TransLog get(Long transId);

	/**
	 * 执行保存
	 * 
	 * @param transLog
	 * @return
	 */
	void create(TransLog transLog);

	/**
	 * 修改事务所处的阶段
	 * 
	 * @param transId
	 * @param phase
	 * @return
	 */
	void updatePhase(TransLog trans);

	/**
	 * 修改事务的参与者
	 * 
	 * @param transLog
	 */
	void updateParticipants(TransLog transLog);

	/**
	 * 删除事务日志（READY阶段的事务日志不能删除，通过定时任务去删除）
	 * 
	 * @param transId
	 * @return
	 */
	void remove(TransLog trans);

	/**
	 * 失败的事务日志
	 * 
	 * @return
	 */
	List<TransLog> queryAllByDelay(Date delay);

	/**
	 * 重试失败
	 * 
	 * @param transId
	 * @return
	 */
	void retry(TransLog trans, int maxTimes);
}